if for do while continue break return struct operator utype const { ; : true false id stringLiteral integerLiteral doubleLiteral == ( ) [ ] { } -> . ! void int double bool + - * / || && != > < >= <= << >> % = , else new goto

Root Op StructDef OperatorDef Type Type1 StructContent VarDefStatement ArgumentsList1 ArgumentExpressionList1  LogicalOrExpression1 TIdentifier1 TRightParen1 FunctionsFirst StatementsFirst Function ArgumentsList Statement StatementList StatementList1 CompoundStatement VariableDeclaration VariableDeclarationStatement VariableDeclarationList PrimaryExpression PostfixExpression ArgumentExpressionList UnaryExpression UnaryOperator CastExpression MultiplicativeExpression AdditiveExpression ShiftExpression RelationalExpression EqualityExpression AndExpression LogicalAndExpression LogicalOrExpression ConditionalExpression AssignmentExpression AssignmentOperator CommaExpression ConstantExpression SelectionStatement IterationStatement JumpStatement LabeledStatement NewStatement Constant

Root Root Function | Root StructDef | Root OperatorDef | epsilon

StructDef struct utype { StructContent } ;
StructContent StructContent Type id ; | epsilon

OperatorDef Type operator Op ( Type id , Type id ) CompoundStatement 
Op = | + | - | * | / | > | < | >= | <= | == | !=                                                                                         

Function Type1 TIdentifier1 ( ArgumentsList ) CompoundStatement
TIdentifier1 id
ArgumentsList1 ArgumentsList | epsilon
ArgumentsList ArgumentsList , Type TIdentifier1 | Type TIdentifier1
CompoundStatement { StatementList1 }
StatementList1 StatementList | epsilon
StatementList Statement StatementList | epsilon

Statement CompoundStatement | IterationStatement | SelectionStatement | CommaExpression ; 
Statement JumpStatement | id : Statement | NewStatement | VarDefStatement
VarDefStatement Type id ; | Type id [ integerLiteral ] ; | const Type id ; | const Type [ integerLiteral ] id ;
IterationStatement do CompoundStatement while ( LogicalOrExpression1 TRightParen1 ;
TRightParen1 ;
SelectionStatement if ( LogicalOrExpression1 ) CompoundStatement

PrimaryExpression id | Constant | ( AssignmentExpression )
PostfixExpression PrimaryExpression | PostfixExpression [ AssignmentExpression ]
PostfixExpression PostfixExpression ( CommaExpression )
PostfixExpression PostfixExpression . id
PostfixExpression PostfixExpression -> id

MultiplicativeExpression PostfixExpression | MultiplicativeExpression * PostfixExpression 
MultiplicativeExpression MultiplicativeExpression / PostfixExpression
MultiplicativeExpression MultiplicativeExpression % PostfixExpression
AdditiveExpression MultiplicativeExpression | AdditiveExpression + MultiplicativeExpression
AdditiveExpression AdditiveExpression - MultiplicativeExpression
RelationalExpression AdditiveExpression | RelationalExpression < AdditiveExpression | RelationalExpression > AdditiveExpression
EqualityExpression RelationalExpression | EqualityExpression == RelationalExpression | EqualityExpression != RelationalExpression
LogicalAndExpression EqualityExpression | LogicalAndExpression && EqualityExpression
LogicalOrExpression LogicalAndExpression | LogicalOrExpression || LogicalAndExpression
ConditionalExpression LogicalOrExpression | ( LogicalOrExpression )
AssignmentExpression ConditionalExpression | PostfixExpression = AssignmentExpression

CommaExpression AssignmentExpression | CommaExpression , AssignmentExpression

Constant integerLiteral | doubleLiteral | stringLiteral | true | false
JumpStatement return ; | return AssignmentExpression ;
JumpStatement goto id ;
NewStatement id = new Type ;

Type int | double | bool | utype
Type1 Type | void











